class Solution {
    /*
        任意一条路径均可以被看作由某个节点为起点，
        从其左儿子和右儿子向下遍历的路径拼接得到。
        所以递归后序遍历即可
    */
    int ans = 0;
    public int diameterOfBinaryTree(TreeNode root) {
        dfs(root);
        return ans;
    }
    public int dfs(TreeNode root){
        if(root==null)
            return 0;
        int len1 = dfs(root.left);
        int len2 = dfs(root.right);
        ans = Math.max(ans,len1+len2);
        return Math.max(len1,len2)+1;   // return Math.max(len1,len2)+root.val; 就是带权值的；
    }
}